<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

require_once 'sitecontroller.php';

class Chamado extends SiteController {
    
    function __construct(){
        parent::__construct();
        parent::auth();
    }
    
    public function repassar($id){
        $chamado = $this->doctrine->em->getRepository('Entities\Chamado')->find($id);
        $chamado->setStatus($this->doctrine->em->getRepository('Entities\Status')->find(2));
        
        $fluxo = new Entities\Fluxo();
        $fluxo->setData(new DateTime());
        $fluxo->setChamado($chamado);
        $fluxo->setUsuarioResponsavel($this->data['user']);
        
        $this->doctrine->em->persist($fluxo);
        $this->doctrine->em->flush();
        
        $procedimento = new Entities\Procedimento();
        $procedimento->setDescricao('Chamado encaminhado');
        $procedimento->setFluxo($fluxo);

        $this->doctrine->em->persist($procedimento);
        $this->doctrine->em->flush();
        
        redirect('/chamado/lista/pendentes');
    }
    
    public function atender($id){
        $chamado = $this->doctrine->em->getRepository('Entities\Chamado')->find($id);
        $chamado->setStatus($this->doctrine->em->getRepository('Entities\Status')->find(1));
        
        $fluxo = new Entities\Fluxo();
        $fluxo->setData(new DateTime());
        $fluxo->setChamado($chamado);
        $fluxo->setUsuarioResponsavel($this->data['user']);
        
        $this->doctrine->em->persist($fluxo);
        $this->doctrine->em->flush();
        
        $procedimento = new Entities\Procedimento();
        $procedimento->setDescricao('Chamado em atendimento');
        $procedimento->setFluxo($fluxo);

        $this->doctrine->em->persist($procedimento);
        $this->doctrine->em->flush();
        
        redirect('/chamado/ver/'.$id);
    }
    
    public function lista($tipo = 'meus') {
        $user = $this->data['user'];
        
        $this->data['title'] = 'Chamados';
        $chamados = array();
        
        if ($tipo == 'meus'){
            $this->data['h1'] = 'Meus Chamados';
            $this->data['h2'] = 'Chamados que voc&ecirc; criou';
            $chamados = $this->doctrine->em->getRepository('Entities\Chamado')->findBy(array('usuario'=>$user), array('dataAbertura'=>'DESC'));
        } elseif ($tipo == 'pendentes'){
            $this->data['h1'] = 'Chamados Pendentes';
            $this->data['h2'] = 'Chamados que voc&ecirc; pode atender';
            
            $todosChamados = $this->doctrine->em->getRepository('Entities\Chamado')->findBy(array('status'=>array(0, 2)));
            foreach($todosChamados as $chamado){
                if ($chamado->getStatus()->getId() == 0){
                    array_push($chamados, $chamado);
                } else {
                    $fluxos = $this->doctrine->em->getRepository('Entities\Fluxo')->findBy(array('chamado'=>$chamado), array('data'=>'DESC'));
                    if ($fluxos[0]->getUsuarioResponsavel()->getNivel() < $user->getNivel()){
                        array_push($chamados, $chamado);
                    }
                }
            }
            
        } elseif ($tipo == 'atendimentos'){
            $this->data['h1'] = 'Meus atendimentos';
            $this->data['h2'] = 'Chamados nos quais voc&ecirc; participou do atendimento';
            
            $fluxos = $this->doctrine->em->getRepository('Entities\Fluxo')->findBy(array('usuarioResponsavel'=>$user), array('data'=>'DESC'));
            foreach($fluxos as $fluxo){
                if (!in_array($fluxo->getChamado(), $chamados)){
                    array_push($chamados, $fluxo->getChamado());
                }
            }
        }
        
        $this->data['chamados'] = $chamados;
        $this->loadView('chamado/lista');
    }
    
    public function ver($id){
        $this->data['chamado'] = $this->doctrine->em->getRepository('Entities\Chamado')->find($id);
        
        if ($this->data['chamado']->getStatus()->getId() > 0){
            $user = $this->data['user'];
            $this->data['fluxos'] = $this->doctrine->em->getRepository('Entities\Fluxo')->findBy(array('chamado'=>$this->data['chamado']));
            
            $procedimentos = array();
            $ics = array();
            
            foreach($this->data['fluxos'] as $fluxo){
                $procedimentos[$fluxo->getId()] = $this->doctrine->em->getRepository('Entities\Procedimento')->findBy(array('fluxo'=>$fluxo));
                $ics[$fluxo->getId()] = array();
                foreach($procedimentos[$fluxo->getId()] as $procedimento){
                    $ics[$fluxo->getId()][$procedimento->getId()] = array();
                    $ics[$fluxo->getId()][$procedimento->getId()] = $this->doctrine->em->getRepository('Entities\Procedimentoic')->findBy(array('procedimento'=>$procedimento));
                }
            }
            
            $this->data['ics'] = $ics;
            $this->data['procedimentos'] = $procedimentos;
        }
        
        $chamados = array();
        foreach($this->doctrine->em->getRepository('Entities\Chamado')->findBy(array('status'=>3, 'servico'=>$this->data['chamado']->getServico()->getId())) as $chamado) {
            similar_text($this->data['chamado']->getDescricao(), $chamado->getDescricao(), $percent);
            if ($percent >= 40 && $chamado != $this->data['chamado']){
                array_push($chamados, $chamado);
            }
        }
        $this->data['chamados'] = $chamados;
        
        $this->loadView('chamado/ver');
    }
    
    public function novo(){
        $this->load->library('form_validation');
        $this->form_validation->set_rules('servico', 'Servi&ccedil;o', 'required|is_natural_no_zero');
        $this->form_validation->set_rules('descricao', 'Descri&ccedil;&atilde;o', 'trim|required');
        
        if ($this->form_validation->run ()) {
            
            $chamado = new Entities\Chamado();
            $chamado->setServico($this->doctrine->em->find('Entities\Servico', $this->input->post('servico')));
            $chamado->setDescricao($this->input->post('descricao'));
            $chamado->setUsuario($this->data['user']);
            $chamado->setDataAbertura(new DateTime());
            $chamado->setStatus($this->doctrine->em->find('Entities\Status', 0));
            
            $this->doctrine->em->persist($chamado);
            $this->doctrine->em->flush();
            
            redirect('/chamado/ver/'.$chamado->getId());
            
        } else {
            $this->data['title'] = 'Novo Chamado';
            $this->data['servicos'] = $this->doctrine->em->getRepository('Entities\Servico')->findAll();

            $this->loadView('chamado/novo');
        }
    }
    
    public function editar($id){
        $this->load->library('form_validation');
        $this->form_validation->set_rules('servico', 'Servi&ccedil;o', 'required|is_natural_no_zero');
        $this->form_validation->set_rules('descricao', 'Descri&ccedil;&atilde;o', 'trim|required');
        
        if ($this->form_validation->run ()) {
            $chamado = $this->doctrine->em->getRepository('Entities\Chamado')->find($id);
            $chamado->setServico($this->doctrine->em->find('Entities\Servico', $this->input->post('servico')));
            $chamado->setDescricao($this->input->post('descricao'));
            
            $this->doctrine->em->flush();
            
            redirect('/chamado/ver/'.$chamado->getId());
        } else {
            $this->data['title'] = 'Editar Chamado';
            $this->data['servicos'] = $this->doctrine->em->getRepository('Entities\Servico')->findAll();
            $this->data['chamado'] = $this->doctrine->em->getRepository('Entities\Chamado')->find($id);

            $this->loadView('chamado/editar');
        }
    }
    
    public function cancelar($id){
        $chamado = $this->doctrine->em->getRepository('Entities\Chamado')->find($id);
        $chamado->setStatus($this->doctrine->em->getRepository('Entities\Status')->find(4));
        
        $fluxo = new Entities\Fluxo();
        $fluxo->setData(new DateTime());
        $fluxo->setChamado($chamado);
        $fluxo->setUsuarioResponsavel($this->data['user']);
        $this->doctrine->em->persist($fluxo);
        
        $procedimento = new Entities\Procedimento();
        $procedimento->setDescricao('Chamado cancelado');
        $procedimento->setFluxo($fluxo);
        $this->doctrine->em->persist($procedimento);
        
        $this->doctrine->em->flush();
        
        redirect('/chamado/lista');
    }
    
    public function resolver($id){
        $chamado = $this->doctrine->em->getRepository('Entities\Chamado')->find($id);
        $chamado->setStatus($this->doctrine->em->getRepository('Entities\Status')->find(3));
        
        $fluxo = new Entities\Fluxo();
        $fluxo->setData(new DateTime());
        $fluxo->setChamado($chamado);
        $fluxo->setUsuarioResponsavel($this->data['user']);
        $this->doctrine->em->persist($fluxo);
        
        $procedimento = new Entities\Procedimento();
        $procedimento->setDescricao('Chamado resolvido');
        $procedimento->setFluxo($fluxo);
        $this->doctrine->em->persist($procedimento);
        
        $this->doctrine->em->flush();
        
        redirect('/chamado/ver/'.$chamado->getId());
    }
    
    public function addproc($id){
        $this->data['idFluxo'] = $id;
        
        $icsStr = '';
        $ics = $this->doctrine->em->getRepository('Entities\Item')->findAll();
        foreach($ics as $key=>$ic){
            $icsStr .= $ic->getId().'-'.$ic->getDescricao();
            if ($key != count($ics) - 1){
                $icsStr .= ',';
            }
        }
        $this->data['icsStr'] = $icsStr;
        
        $this->load->view('chamado/addproc', $this->data);
    }
    
}

